import { MigrationInterface } from "./MigrationInterface"

/**
 * Represents entity of the migration in the database.
 */
export class Migration {
    // -------------------------------------------------------------------------
    // Public Properties
    // -------------------------------------------------------------------------

    /**
     * Migration id.
     * Indicates order of the executed migrations.
     */
    id: number | undefined

    /**
     * Timestamp of the migration.
     */
    timestamp: number

    /**
     * Name of the migration (class name).
     */
    name: string

    /**
     * Migration instance that needs to be run.
     */
    instance?: MigrationInterface

    /**
     * Whether to run this migration within a transaction
     */
    transaction?: boolean

    // -------------------------------------------------------------------------
    // Constructor
    // -------------------------------------------------------------------------

    constructor(
        id: number | undefined,
        timestamp: number,
        name: string,
        instance?: MigrationInterface,
        transaction?: boolean,
    ) {
        this.id = id
        this.timestamp = timestamp
        this.name = name
        this.instance = instance
        this.transaction = transaction
    }
}
